package agenda;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;

/**
 * Classe Evento
 * 
 * @author Célio Roberto, Ricardo Magno, Wesley Brenno
 * 
 */
public class Evento implements Serializable {
	private ArrayList<Contato> Contatos;
	private String nome;
	private String data;
	private String horario;
	private String duracao;
	private String descricao;
	private String tipo;
	private ArrayList<Anotação> Anotaçoes;
	/**
	 * Construtor da Classe Usuario
	 * 
	 * @param nome
	 *            Nome do evento
	 * @param data
	 *            Data do evento
	 * @param horario
	 *            Hórario do evento
	 * @param duracao
	 *            Duração do evento
	 * @param descricao
	 *            Descrição do evento
	 * @param tipo
	 *            Tipo do evento
	 */
	public Evento(String nome, String data, String horario, String duracao,
			String descricao, String tipo) {
		this.nome = nome;
		this.data = data;
		this.horario = horario;
		this.duracao = duracao;
		this.descricao = descricao;
		this.tipo = tipo;
		this.Anotaçoes = new ArrayList<Anotação>();
		this.Contatos = new ArrayList<Contato>();
	}
	/**
	 * Retorna o nome do Evento
	 * 
	 * @return nome do Evento
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * Retorna a Data do Evento
	 * 
	 * @return Data do evento
	 */
	public String getData() {
		return data;
	}

	/**
	 * Retorna o Horario do Evento
	 * 
	 * @return Horario do evento
	 */
	public String getHorario() {
		return horario;
	}

	/**
	 * Retorna o tempo de Duração do Evento
	 * 
	 * @return Duração do Evento
	 */
	public String getDuracao() {
		return duracao;
	}

	/**
	 * Retorna a Descrição do Evento
	 * 
	 * @return Descrição do evento
	 */
	public String getDescricao() {
		return descricao;
	}
	/**
	 * Pega a lista de Contatos relacionados ao evento
	 * @return
	 */
	public ArrayList<Contato> getContatos(){
		return this.Contatos;
	}
	
	/**
	 * Retorna o Tipo do Evento
	 * 
	 * @return Tipo do evento
	 */
	public String getTipo() {
		return tipo;
	}

	/**
	 * Retorna as Anotações do Evento
	 * 
	 * @return Anotações do evento
	 */
	public ArrayList<Anotação> getAnotacoes() {
		return this.Anotaçoes;
	}

	/**
	 * Altera o Nome do Evento
	 * 
	 * @param nome
	 *            Novo nome do Evento
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * Altera a data do evento
	 * 
	 * @param data
	 *            Nova data do evento
	 * 
	 */
	public void setData(String data) {
		this.data = data;
	}

	/**
	 * Altera o Hórario do Evento
	 * 
	 * @param horario
	 *            Novo hórario do Evento
	 */
	public void setHorario(String horario) {
		this.horario = horario;
	}

	/**
	 * Altera a Duração do Evento
	 * 
	 * @param duracao
	 *            nova duração do evento
	 */
	public void setDuracao(String duracao) {
		this.duracao = duracao;
	}

	/**
	 * Altera a Descrição do Evento
	 * 
	 * @param descricao
	 *            Nova descrição do evento
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	/**
	 * Altera o tipo do Evento
	 * 
	 * @param tipo
	 *            Novo tipo do Evento
	 */
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	/**
	 * Altera o tipo das anotações
	 * 
	 * @param anotacoes
	 *            Novas anotações
	 */
	public void addAnotacoes(Anotação Anotação) {
		this.Anotaçoes.add(Anotação);
	}
	/**
	 * Cadastra Contato relacionado ao Evento
	 * @param Contato
	 * 		Contato a ser cadastrado
	 */
	public void CadastraContatos(Contato Contato){
		this.Contatos.add(Contato);
	}
	/**
	 * Remove Contato relacionado com o Evento
	 * @param Contato
	 * 		Contato a ser removido
	 */
	public void RemoverContatos(Contato Contato){
		this.Contatos.remove(Contato);
	}
	/**
	 * Representação do Evento em String
	 */
	public String toString() {
		String ContatosRelacionados = "";
		Iterator<Contato> it = Contatos.iterator();
		while (it.hasNext()){
			ContatosRelacionados += it.next().getNome()+",";
		}
		return "Evento: " + getNome() + "\nData: " + getData() + "\nHorário: "
				+ getHorario() + "\nDuração: " + getDuracao() + "\nDescrição: "
				+ getDescricao() + "\nTipo: " + getTipo() + "\nAnotações: "
				+ getAnotacoes() + "\nContatos Relacionados: " + ContatosRelacionados;
	}
	/*
	 * Caso2: Adicionar evento O usuário cadastra um novo evento no sistema.
	 * Cada evento tem um nome, data, horário, duração e uma descrição
	 * (anotações serão adicionadas em casos de uso posteriores). Um evento pode
	 * ter um tipo, que é informado pelo usuário (como um campo de texto livre).
	 * Se o usuário adicionar um novo evento que tenha intersecção com outro
	 * pré- existente, deve ser perguntado ao usuário se o anterior deve ser
	 * cancelado ou haverá sobrecarga de horário. Após adicionar um evento, o
	 * usuário pode listar todos os eventos do sistema. Neste caso, o sistema
	 * exibe duas listas de eventos: uma de eventos futuros e outra de eventos
	 * passados.
	 */
}
